//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2022 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

import Foundation
import SotoCore

extension ChimeSDKVoice {
    // MARK: Enums

    public enum AlexaSkillStatus: String, CustomStringConvertible, Codable, _SotoSendable {
        case active = "ACTIVE"
        case inactive = "INACTIVE"
        public var description: String { return self.rawValue }
    }

    public enum CallingNameStatus: String, CustomStringConvertible, Codable, _SotoSendable {
        case unassigned = "Unassigned"
        case updateFailed = "UpdateFailed"
        case updateInProgress = "UpdateInProgress"
        case updateSucceeded = "UpdateSucceeded"
        public var description: String { return self.rawValue }
    }

    public enum Capability: String, CustomStringConvertible, Codable, _SotoSendable {
        case sms = "SMS"
        case voice = "Voice"
        public var description: String { return self.rawValue }
    }

    public enum ErrorCode: String, CustomStringConvertible, Codable, _SotoSendable {
        case accessDenied = "AccessDenied"
        case badRequest = "BadRequest"
        case conflict = "Conflict"
        case forbidden = "Forbidden"
        case gone = "Gone"
        case notFound = "NotFound"
        case phoneNumberAssociationsExist = "PhoneNumberAssociationsExist"
        case preconditionFailed = "PreconditionFailed"
        case resourceLimitExceeded = "ResourceLimitExceeded"
        case serviceFailure = "ServiceFailure"
        case serviceUnavailable = "ServiceUnavailable"
        case throttled = "Throttled"
        case throttling = "Throttling"
        case unauthorized = "Unauthorized"
        case unprocessable = "Unprocessable"
        case voiceConnectorGroupAssociationsExist = "VoiceConnectorGroupAssociationsExist"
        public var description: String { return self.rawValue }
    }

    public enum GeoMatchLevel: String, CustomStringConvertible, Codable, _SotoSendable {
        case areaCode = "AreaCode"
        case country = "Country"
        public var description: String { return self.rawValue }
    }

    public enum NotificationTarget: String, CustomStringConvertible, Codable, _SotoSendable {
        case eventBridge = "EventBridge"
        case sns = "SNS"
        case sqs = "SQS"
        public var description: String { return self.rawValue }
    }

    public enum NumberSelectionBehavior: String, CustomStringConvertible, Codable, _SotoSendable {
        case avoidSticky = "AvoidSticky"
        case preferSticky = "PreferSticky"
        public var description: String { return self.rawValue }
    }

    public enum OrderedPhoneNumberStatus: String, CustomStringConvertible, Codable, _SotoSendable {
        case acquired = "Acquired"
        case failed = "Failed"
        case processing = "Processing"
        public var description: String { return self.rawValue }
    }

    public enum OriginationRouteProtocol: String, CustomStringConvertible, Codable, _SotoSendable {
        case tcp = "TCP"
        case udp = "UDP"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberAssociationName: String, CustomStringConvertible, Codable, _SotoSendable {
        case sipRuleId = "SipRuleId"
        case voiceConnectorGroupId = "VoiceConnectorGroupId"
        case voiceConnectorId = "VoiceConnectorId"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberOrderStatus: String, CustomStringConvertible, Codable, _SotoSendable {
        case cancelRequested = "CancelRequested"
        case cancelled = "Cancelled"
        case changeRequested = "ChangeRequested"
        case exception = "Exception"
        case failed = "Failed"
        case foc = "FOC"
        case partial = "Partial"
        case pendingDocuments = "PendingDocuments"
        case processing = "Processing"
        case submitted = "Submitted"
        case successful = "Successful"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberOrderType: String, CustomStringConvertible, Codable, _SotoSendable {
        case new = "New"
        case porting = "Porting"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberProductType: String, CustomStringConvertible, Codable, _SotoSendable {
        case sipMediaApplicationDialIn = "SipMediaApplicationDialIn"
        case voiceConnector = "VoiceConnector"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberStatus: String, CustomStringConvertible, Codable, _SotoSendable {
        case acquireFailed = "AcquireFailed"
        case acquireInProgress = "AcquireInProgress"
        case assigned = "Assigned"
        case cancelled = "Cancelled"
        case deleteFailed = "DeleteFailed"
        case deleteInProgress = "DeleteInProgress"
        case portinCancelRequested = "PortinCancelRequested"
        case portinInProgress = "PortinInProgress"
        case releaseFailed = "ReleaseFailed"
        case releaseInProgress = "ReleaseInProgress"
        case unassigned = "Unassigned"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberType: String, CustomStringConvertible, Codable, _SotoSendable {
        case local = "Local"
        case tollFree = "TollFree"
        public var description: String { return self.rawValue }
    }

    public enum ProxySessionStatus: String, CustomStringConvertible, Codable, _SotoSendable {
        case closed = "Closed"
        case inProgress = "InProgress"
        case open = "Open"
        public var description: String { return self.rawValue }
    }

    public enum SipRuleTriggerType: String, CustomStringConvertible, Codable, _SotoSendable {
        case requestUriHostname = "RequestUriHostname"
        case toPhoneNumber = "ToPhoneNumber"
        public var description: String { return self.rawValue }
    }

    public enum VoiceConnectorAwsRegion: String, CustomStringConvertible, Codable, _SotoSendable {
        case apNortheast1 = "ap-northeast-1"
        case apNortheast2 = "ap-northeast-2"
        case apSoutheast1 = "ap-southeast-1"
        case apSoutheast2 = "ap-southeast-2"
        case caCentral1 = "ca-central-1"
        case euCentral1 = "eu-central-1"
        case euWest1 = "eu-west-1"
        case euWest2 = "eu-west-2"
        case usEast1 = "us-east-1"
        case usWest2 = "us-west-2"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct Address: AWSDecodableShape {
        public let city: String?
        public let country: String?
        public let postalCode: String?
        public let postalCodePlus4: String?
        public let postDirectional: String?
        public let preDirectional: String?
        public let state: String?
        public let streetName: String?
        public let streetNumber: String?
        public let streetSuffix: String?

        public init(city: String? = nil, country: String? = nil, postalCode: String? = nil, postalCodePlus4: String? = nil, postDirectional: String? = nil, preDirectional: String? = nil, state: String? = nil, streetName: String? = nil, streetNumber: String? = nil, streetSuffix: String? = nil) {
            self.city = city
            self.country = country
            self.postalCode = postalCode
            self.postalCodePlus4 = postalCodePlus4
            self.postDirectional = postDirectional
            self.preDirectional = preDirectional
            self.state = state
            self.streetName = streetName
            self.streetNumber = streetNumber
            self.streetSuffix = streetSuffix
        }

        private enum CodingKeys: String, CodingKey {
            case city
            case country
            case postalCode
            case postalCodePlus4
            case postDirectional
            case preDirectional
            case state
            case streetName
            case streetNumber
            case streetSuffix
        }
    }

    public struct AssociatePhoneNumbersWithVoiceConnectorGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorGroupId", location: .uri("VoiceConnectorGroupId"))
        ]

        public let e164PhoneNumbers: [String]
        public let forceAssociate: Bool?
        public let voiceConnectorGroupId: String

        public init(e164PhoneNumbers: [String], forceAssociate: Bool? = nil, voiceConnectorGroupId: String) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.forceAssociate = forceAssociate
            self.voiceConnectorGroupId = voiceConnectorGroupId
        }

        public func validate(name: String) throws {
            try self.e164PhoneNumbers.forEach {
                try validate($0, name: "e164PhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
            try self.validate(self.voiceConnectorGroupId, name: "voiceConnectorGroupId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
            case forceAssociate = "ForceAssociate"
        }
    }

    public struct AssociatePhoneNumbersWithVoiceConnectorGroupResponse: AWSDecodableShape {
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct AssociatePhoneNumbersWithVoiceConnectorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let e164PhoneNumbers: [String]
        public let forceAssociate: Bool?
        public let voiceConnectorId: String

        public init(e164PhoneNumbers: [String], forceAssociate: Bool? = nil, voiceConnectorId: String) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.forceAssociate = forceAssociate
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.e164PhoneNumbers.forEach {
                try validate($0, name: "e164PhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
            case forceAssociate = "ForceAssociate"
        }
    }

    public struct AssociatePhoneNumbersWithVoiceConnectorResponse: AWSDecodableShape {
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct BatchDeletePhoneNumberRequest: AWSEncodableShape {
        public let phoneNumberIds: [String]

        public init(phoneNumberIds: [String]) {
            self.phoneNumberIds = phoneNumberIds
        }

        public func validate(name: String) throws {
            try self.validate(self.phoneNumberIds, name: "phoneNumberIds", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberIds = "PhoneNumberIds"
        }
    }

    public struct BatchDeletePhoneNumberResponse: AWSDecodableShape {
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct BatchUpdatePhoneNumberRequest: AWSEncodableShape {
        public let updatePhoneNumberRequestItems: [UpdatePhoneNumberRequestItem]

        public init(updatePhoneNumberRequestItems: [UpdatePhoneNumberRequestItem]) {
            self.updatePhoneNumberRequestItems = updatePhoneNumberRequestItems
        }

        public func validate(name: String) throws {
            try self.updatePhoneNumberRequestItems.forEach {
                try $0.validate(name: "\(name).updatePhoneNumberRequestItems[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case updatePhoneNumberRequestItems = "UpdatePhoneNumberRequestItems"
        }
    }

    public struct BatchUpdatePhoneNumberResponse: AWSDecodableShape {
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct CandidateAddress: AWSDecodableShape {
        public let city: String?
        public let country: String?
        public let postalCode: String?
        public let postalCodePlus4: String?
        public let state: String?
        public let streetInfo: String?
        public let streetNumber: String?

        public init(city: String? = nil, country: String? = nil, postalCode: String? = nil, postalCodePlus4: String? = nil, state: String? = nil, streetInfo: String? = nil, streetNumber: String? = nil) {
            self.city = city
            self.country = country
            self.postalCode = postalCode
            self.postalCodePlus4 = postalCodePlus4
            self.state = state
            self.streetInfo = streetInfo
            self.streetNumber = streetNumber
        }

        private enum CodingKeys: String, CodingKey {
            case city
            case country
            case postalCode
            case postalCodePlus4
            case state
            case streetInfo
            case streetNumber
        }
    }

    public struct CreatePhoneNumberOrderRequest: AWSEncodableShape {
        public let e164PhoneNumbers: [String]
        public let productType: PhoneNumberProductType

        public init(e164PhoneNumbers: [String], productType: PhoneNumberProductType) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.productType = productType
        }

        public func validate(name: String) throws {
            try self.e164PhoneNumbers.forEach {
                try validate($0, name: "e164PhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
            case productType = "ProductType"
        }
    }

    public struct CreatePhoneNumberOrderResponse: AWSDecodableShape {
        public let phoneNumberOrder: PhoneNumberOrder?

        public init(phoneNumberOrder: PhoneNumberOrder? = nil) {
            self.phoneNumberOrder = phoneNumberOrder
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberOrder = "PhoneNumberOrder"
        }
    }

    public struct CreateProxySessionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let capabilities: [Capability]
        public let expiryMinutes: Int?
        public let geoMatchLevel: GeoMatchLevel?
        public let geoMatchParams: GeoMatchParams?
        public let name: String?
        public let numberSelectionBehavior: NumberSelectionBehavior?
        public let participantPhoneNumbers: [String]
        public let voiceConnectorId: String

        public init(capabilities: [Capability], expiryMinutes: Int? = nil, geoMatchLevel: GeoMatchLevel? = nil, geoMatchParams: GeoMatchParams? = nil, name: String? = nil, numberSelectionBehavior: NumberSelectionBehavior? = nil, participantPhoneNumbers: [String], voiceConnectorId: String) {
            self.capabilities = capabilities
            self.expiryMinutes = expiryMinutes
            self.geoMatchLevel = geoMatchLevel
            self.geoMatchParams = geoMatchParams
            self.name = name
            self.numberSelectionBehavior = numberSelectionBehavior
            self.participantPhoneNumbers = participantPhoneNumbers
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.expiryMinutes, name: "expiryMinutes", parent: name, min: 1)
            try self.geoMatchParams?.validate(name: "\(name).geoMatchParams")
            try self.validate(self.name, name: "name", parent: name, pattern: "^$|^[a-zA-Z0-9 ]{0,30}$")
            try self.participantPhoneNumbers.forEach {
                try validate($0, name: "participantPhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
            try self.validate(self.participantPhoneNumbers, name: "participantPhoneNumbers", parent: name, max: 2)
            try self.validate(self.participantPhoneNumbers, name: "participantPhoneNumbers", parent: name, min: 2)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case capabilities = "Capabilities"
            case expiryMinutes = "ExpiryMinutes"
            case geoMatchLevel = "GeoMatchLevel"
            case geoMatchParams = "GeoMatchParams"
            case name = "Name"
            case numberSelectionBehavior = "NumberSelectionBehavior"
            case participantPhoneNumbers = "ParticipantPhoneNumbers"
        }
    }

    public struct CreateProxySessionResponse: AWSDecodableShape {
        public let proxySession: ProxySession?

        public init(proxySession: ProxySession? = nil) {
            self.proxySession = proxySession
        }

        private enum CodingKeys: String, CodingKey {
            case proxySession = "ProxySession"
        }
    }

    public struct CreateSipMediaApplicationCallRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId"))
        ]

        public let argumentsMap: [String: String]?
        public let fromPhoneNumber: String
        public let sipHeaders: [String: String]?
        public let sipMediaApplicationId: String
        public let toPhoneNumber: String

        public init(argumentsMap: [String: String]? = nil, fromPhoneNumber: String, sipHeaders: [String: String]? = nil, sipMediaApplicationId: String, toPhoneNumber: String) {
            self.argumentsMap = argumentsMap
            self.fromPhoneNumber = fromPhoneNumber
            self.sipHeaders = sipHeaders
            self.sipMediaApplicationId = sipMediaApplicationId
            self.toPhoneNumber = toPhoneNumber
        }

        public func validate(name: String) throws {
            try self.validate(self.argumentsMap, name: "argumentsMap", parent: name, max: 20)
            try self.validate(self.fromPhoneNumber, name: "fromPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            try self.validate(self.sipHeaders, name: "sipHeaders", parent: name, max: 20)
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
            try self.validate(self.toPhoneNumber, name: "toPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
        }

        private enum CodingKeys: String, CodingKey {
            case argumentsMap = "ArgumentsMap"
            case fromPhoneNumber = "FromPhoneNumber"
            case sipHeaders = "SipHeaders"
            case toPhoneNumber = "ToPhoneNumber"
        }
    }

    public struct CreateSipMediaApplicationCallResponse: AWSDecodableShape {
        public let sipMediaApplicationCall: SipMediaApplicationCall?

        public init(sipMediaApplicationCall: SipMediaApplicationCall? = nil) {
            self.sipMediaApplicationCall = sipMediaApplicationCall
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationCall = "SipMediaApplicationCall"
        }
    }

    public struct CreateSipMediaApplicationRequest: AWSEncodableShape {
        public let awsRegion: String
        public let endpoints: [SipMediaApplicationEndpoint]
        public let name: String

        public init(awsRegion: String, endpoints: [SipMediaApplicationEndpoint], name: String) {
            self.awsRegion = awsRegion
            self.endpoints = endpoints
            self.name = name
        }

        public func validate(name: String) throws {
            try self.endpoints.forEach {
                try $0.validate(name: "\(name).endpoints[]")
            }
            try self.validate(self.endpoints, name: "endpoints", parent: name, max: 1)
            try self.validate(self.endpoints, name: "endpoints", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case endpoints = "Endpoints"
            case name = "Name"
        }
    }

    public struct CreateSipMediaApplicationResponse: AWSDecodableShape {
        public let sipMediaApplication: SipMediaApplication?

        public init(sipMediaApplication: SipMediaApplication? = nil) {
            self.sipMediaApplication = sipMediaApplication
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplication = "SipMediaApplication"
        }
    }

    public struct CreateSipRuleRequest: AWSEncodableShape {
        public let disabled: Bool?
        public let name: String
        public let targetApplications: [SipRuleTargetApplication]?
        public let triggerType: SipRuleTriggerType
        public let triggerValue: String

        public init(disabled: Bool? = nil, name: String, targetApplications: [SipRuleTargetApplication]? = nil, triggerType: SipRuleTriggerType, triggerValue: String) {
            self.disabled = disabled
            self.name = name
            self.targetApplications = targetApplications
            self.triggerType = triggerType
            self.triggerValue = triggerValue
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.targetApplications?.forEach {
                try $0.validate(name: "\(name).targetApplications[]")
            }
            try self.validate(self.targetApplications, name: "targetApplications", parent: name, max: 25)
            try self.validate(self.targetApplications, name: "targetApplications", parent: name, min: 1)
            try self.validate(self.triggerValue, name: "triggerValue", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case disabled = "Disabled"
            case name = "Name"
            case targetApplications = "TargetApplications"
            case triggerType = "TriggerType"
            case triggerValue = "TriggerValue"
        }
    }

    public struct CreateSipRuleResponse: AWSDecodableShape {
        public let sipRule: SipRule?

        public init(sipRule: SipRule? = nil) {
            self.sipRule = sipRule
        }

        private enum CodingKeys: String, CodingKey {
            case sipRule = "SipRule"
        }
    }

    public struct CreateVoiceConnectorGroupRequest: AWSEncodableShape {
        public let name: String
        public let voiceConnectorItems: [VoiceConnectorItem]?

        public init(name: String, voiceConnectorItems: [VoiceConnectorItem]? = nil) {
            self.name = name
            self.voiceConnectorItems = voiceConnectorItems
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.voiceConnectorItems?.forEach {
                try $0.validate(name: "\(name).voiceConnectorItems[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case voiceConnectorItems = "VoiceConnectorItems"
        }
    }

    public struct CreateVoiceConnectorGroupResponse: AWSDecodableShape {
        public let voiceConnectorGroup: VoiceConnectorGroup?

        public init(voiceConnectorGroup: VoiceConnectorGroup? = nil) {
            self.voiceConnectorGroup = voiceConnectorGroup
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnectorGroup = "VoiceConnectorGroup"
        }
    }

    public struct CreateVoiceConnectorRequest: AWSEncodableShape {
        public let awsRegion: VoiceConnectorAwsRegion?
        public let name: String
        public let requireEncryption: Bool

        public init(awsRegion: VoiceConnectorAwsRegion? = nil, name: String, requireEncryption: Bool) {
            self.awsRegion = awsRegion
            self.name = name
            self.requireEncryption = requireEncryption
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case name = "Name"
            case requireEncryption = "RequireEncryption"
        }
    }

    public struct CreateVoiceConnectorResponse: AWSDecodableShape {
        public let voiceConnector: VoiceConnector?

        public init(voiceConnector: VoiceConnector? = nil) {
            self.voiceConnector = voiceConnector
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnector = "VoiceConnector"
        }
    }

    public struct Credential: AWSEncodableShape {
        public let password: String?
        public let username: String?

        public init(password: String? = nil, username: String? = nil) {
            self.password = password
            self.username = username
        }

        private enum CodingKeys: String, CodingKey {
            case password = "Password"
            case username = "Username"
        }
    }

    public struct DNISEmergencyCallingConfiguration: AWSEncodableShape & AWSDecodableShape {
        public let callingCountry: String
        public let emergencyPhoneNumber: String
        public let testPhoneNumber: String?

        public init(callingCountry: String, emergencyPhoneNumber: String, testPhoneNumber: String? = nil) {
            self.callingCountry = callingCountry
            self.emergencyPhoneNumber = emergencyPhoneNumber
            self.testPhoneNumber = testPhoneNumber
        }

        public func validate(name: String) throws {
            try self.validate(self.callingCountry, name: "callingCountry", parent: name, pattern: "^[A-Z]{2}$")
            try self.validate(self.emergencyPhoneNumber, name: "emergencyPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            try self.validate(self.testPhoneNumber, name: "testPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
        }

        private enum CodingKeys: String, CodingKey {
            case callingCountry = "CallingCountry"
            case emergencyPhoneNumber = "EmergencyPhoneNumber"
            case testPhoneNumber = "TestPhoneNumber"
        }
    }

    public struct DeletePhoneNumberRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "phoneNumberId", location: .uri("PhoneNumberId"))
        ]

        public let phoneNumberId: String

        public init(phoneNumberId: String) {
            self.phoneNumberId = phoneNumberId
        }

        public func validate(name: String) throws {
            try self.validate(self.phoneNumberId, name: "phoneNumberId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteProxySessionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "proxySessionId", location: .uri("ProxySessionId")),
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let proxySessionId: String
        public let voiceConnectorId: String

        public init(proxySessionId: String, voiceConnectorId: String) {
            self.proxySessionId = proxySessionId
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, max: 128)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, min: 1)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, pattern: "\\S")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteSipMediaApplicationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId"))
        ]

        public let sipMediaApplicationId: String

        public init(sipMediaApplicationId: String) {
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteSipRuleRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipRuleId", location: .uri("SipRuleId"))
        ]

        public let sipRuleId: String

        public init(sipRuleId: String) {
            self.sipRuleId = sipRuleId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipRuleId, name: "sipRuleId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorEmergencyCallingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorGroupId", location: .uri("VoiceConnectorGroupId"))
        ]

        public let voiceConnectorGroupId: String

        public init(voiceConnectorGroupId: String) {
            self.voiceConnectorGroupId = voiceConnectorGroupId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorGroupId, name: "voiceConnectorGroupId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorOriginationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorProxyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorStreamingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorTerminationCredentialsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let usernames: [String]
        public let voiceConnectorId: String

        public init(usernames: [String], voiceConnectorId: String) {
            self.usernames = usernames
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case usernames = "Usernames"
        }
    }

    public struct DeleteVoiceConnectorTerminationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociatePhoneNumbersFromVoiceConnectorGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorGroupId", location: .uri("VoiceConnectorGroupId"))
        ]

        public let e164PhoneNumbers: [String]
        public let voiceConnectorGroupId: String

        public init(e164PhoneNumbers: [String], voiceConnectorGroupId: String) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.voiceConnectorGroupId = voiceConnectorGroupId
        }

        public func validate(name: String) throws {
            try self.e164PhoneNumbers.forEach {
                try validate($0, name: "e164PhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
            try self.validate(self.voiceConnectorGroupId, name: "voiceConnectorGroupId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
        }
    }

    public struct DisassociatePhoneNumbersFromVoiceConnectorGroupResponse: AWSDecodableShape {
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct DisassociatePhoneNumbersFromVoiceConnectorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let e164PhoneNumbers: [String]
        public let voiceConnectorId: String

        public init(e164PhoneNumbers: [String], voiceConnectorId: String) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.e164PhoneNumbers.forEach {
                try validate($0, name: "e164PhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
        }
    }

    public struct DisassociatePhoneNumbersFromVoiceConnectorResponse: AWSDecodableShape {
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct EmergencyCallingConfiguration: AWSEncodableShape & AWSDecodableShape {
        public let dnis: [DNISEmergencyCallingConfiguration]?

        public init(dnis: [DNISEmergencyCallingConfiguration]? = nil) {
            self.dnis = dnis
        }

        public func validate(name: String) throws {
            try self.dnis?.forEach {
                try $0.validate(name: "\(name).dnis[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case dnis = "DNIS"
        }
    }

    public struct GeoMatchParams: AWSEncodableShape & AWSDecodableShape {
        public let areaCode: String
        public let country: String

        public init(areaCode: String, country: String) {
            self.areaCode = areaCode
            self.country = country
        }

        public func validate(name: String) throws {
            try self.validate(self.areaCode, name: "areaCode", parent: name, pattern: "^$|^[0-9]{3,3}$")
            try self.validate(self.country, name: "country", parent: name, pattern: "^$|^[A-Z]{2,2}$")
        }

        private enum CodingKeys: String, CodingKey {
            case areaCode = "AreaCode"
            case country = "Country"
        }
    }

    public struct GetGlobalSettingsResponse: AWSDecodableShape {
        public let voiceConnector: VoiceConnectorSettings?

        public init(voiceConnector: VoiceConnectorSettings? = nil) {
            self.voiceConnector = voiceConnector
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnector = "VoiceConnector"
        }
    }

    public struct GetPhoneNumberOrderRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "phoneNumberOrderId", location: .uri("PhoneNumberOrderId"))
        ]

        public let phoneNumberOrderId: String

        public init(phoneNumberOrderId: String) {
            self.phoneNumberOrderId = phoneNumberOrderId
        }

        public func validate(name: String) throws {
            try self.validate(self.phoneNumberOrderId, name: "phoneNumberOrderId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetPhoneNumberOrderResponse: AWSDecodableShape {
        public let phoneNumberOrder: PhoneNumberOrder?

        public init(phoneNumberOrder: PhoneNumberOrder? = nil) {
            self.phoneNumberOrder = phoneNumberOrder
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberOrder = "PhoneNumberOrder"
        }
    }

    public struct GetPhoneNumberRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "phoneNumberId", location: .uri("PhoneNumberId"))
        ]

        public let phoneNumberId: String

        public init(phoneNumberId: String) {
            self.phoneNumberId = phoneNumberId
        }

        public func validate(name: String) throws {
            try self.validate(self.phoneNumberId, name: "phoneNumberId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetPhoneNumberResponse: AWSDecodableShape {
        public let phoneNumber: PhoneNumber?

        public init(phoneNumber: PhoneNumber? = nil) {
            self.phoneNumber = phoneNumber
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumber = "PhoneNumber"
        }
    }

    public struct GetPhoneNumberSettingsResponse: AWSDecodableShape {
        public let callingName: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var callingNameUpdatedTimestamp: Date?

        public init(callingName: String? = nil, callingNameUpdatedTimestamp: Date? = nil) {
            self.callingName = callingName
            self.callingNameUpdatedTimestamp = callingNameUpdatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case callingName = "CallingName"
            case callingNameUpdatedTimestamp = "CallingNameUpdatedTimestamp"
        }
    }

    public struct GetProxySessionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "proxySessionId", location: .uri("ProxySessionId")),
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let proxySessionId: String
        public let voiceConnectorId: String

        public init(proxySessionId: String, voiceConnectorId: String) {
            self.proxySessionId = proxySessionId
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, max: 128)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, min: 1)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, pattern: "\\S")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetProxySessionResponse: AWSDecodableShape {
        public let proxySession: ProxySession?

        public init(proxySession: ProxySession? = nil) {
            self.proxySession = proxySession
        }

        private enum CodingKeys: String, CodingKey {
            case proxySession = "ProxySession"
        }
    }

    public struct GetSipMediaApplicationAlexaSkillConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId"))
        ]

        public let sipMediaApplicationId: String

        public init(sipMediaApplicationId: String) {
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSipMediaApplicationAlexaSkillConfigurationResponse: AWSDecodableShape {
        public let sipMediaApplicationAlexaSkillConfiguration: SipMediaApplicationAlexaSkillConfiguration?

        public init(sipMediaApplicationAlexaSkillConfiguration: SipMediaApplicationAlexaSkillConfiguration? = nil) {
            self.sipMediaApplicationAlexaSkillConfiguration = sipMediaApplicationAlexaSkillConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationAlexaSkillConfiguration = "SipMediaApplicationAlexaSkillConfiguration"
        }
    }

    public struct GetSipMediaApplicationLoggingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId"))
        ]

        public let sipMediaApplicationId: String

        public init(sipMediaApplicationId: String) {
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSipMediaApplicationLoggingConfigurationResponse: AWSDecodableShape {
        public let sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration?

        public init(sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration? = nil) {
            self.sipMediaApplicationLoggingConfiguration = sipMediaApplicationLoggingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationLoggingConfiguration = "SipMediaApplicationLoggingConfiguration"
        }
    }

    public struct GetSipMediaApplicationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId"))
        ]

        public let sipMediaApplicationId: String

        public init(sipMediaApplicationId: String) {
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSipMediaApplicationResponse: AWSDecodableShape {
        public let sipMediaApplication: SipMediaApplication?

        public init(sipMediaApplication: SipMediaApplication? = nil) {
            self.sipMediaApplication = sipMediaApplication
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplication = "SipMediaApplication"
        }
    }

    public struct GetSipRuleRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipRuleId", location: .uri("SipRuleId"))
        ]

        public let sipRuleId: String

        public init(sipRuleId: String) {
            self.sipRuleId = sipRuleId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipRuleId, name: "sipRuleId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSipRuleResponse: AWSDecodableShape {
        public let sipRule: SipRule?

        public init(sipRule: SipRule? = nil) {
            self.sipRule = sipRule
        }

        private enum CodingKeys: String, CodingKey {
            case sipRule = "SipRule"
        }
    }

    public struct GetVoiceConnectorEmergencyCallingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorEmergencyCallingConfigurationResponse: AWSDecodableShape {
        public let emergencyCallingConfiguration: EmergencyCallingConfiguration?

        public init(emergencyCallingConfiguration: EmergencyCallingConfiguration? = nil) {
            self.emergencyCallingConfiguration = emergencyCallingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case emergencyCallingConfiguration = "EmergencyCallingConfiguration"
        }
    }

    public struct GetVoiceConnectorGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorGroupId", location: .uri("VoiceConnectorGroupId"))
        ]

        public let voiceConnectorGroupId: String

        public init(voiceConnectorGroupId: String) {
            self.voiceConnectorGroupId = voiceConnectorGroupId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorGroupId, name: "voiceConnectorGroupId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorGroupResponse: AWSDecodableShape {
        public let voiceConnectorGroup: VoiceConnectorGroup?

        public init(voiceConnectorGroup: VoiceConnectorGroup? = nil) {
            self.voiceConnectorGroup = voiceConnectorGroup
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnectorGroup = "VoiceConnectorGroup"
        }
    }

    public struct GetVoiceConnectorLoggingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorLoggingConfigurationResponse: AWSDecodableShape {
        public let loggingConfiguration: LoggingConfiguration?

        public init(loggingConfiguration: LoggingConfiguration? = nil) {
            self.loggingConfiguration = loggingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case loggingConfiguration = "LoggingConfiguration"
        }
    }

    public struct GetVoiceConnectorOriginationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorOriginationResponse: AWSDecodableShape {
        public let origination: Origination?

        public init(origination: Origination? = nil) {
            self.origination = origination
        }

        private enum CodingKeys: String, CodingKey {
            case origination = "Origination"
        }
    }

    public struct GetVoiceConnectorProxyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorProxyResponse: AWSDecodableShape {
        public let proxy: Proxy?

        public init(proxy: Proxy? = nil) {
            self.proxy = proxy
        }

        private enum CodingKeys: String, CodingKey {
            case proxy = "Proxy"
        }
    }

    public struct GetVoiceConnectorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorResponse: AWSDecodableShape {
        public let voiceConnector: VoiceConnector?

        public init(voiceConnector: VoiceConnector? = nil) {
            self.voiceConnector = voiceConnector
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnector = "VoiceConnector"
        }
    }

    public struct GetVoiceConnectorStreamingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorStreamingConfigurationResponse: AWSDecodableShape {
        public let streamingConfiguration: StreamingConfiguration?

        public init(streamingConfiguration: StreamingConfiguration? = nil) {
            self.streamingConfiguration = streamingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case streamingConfiguration = "StreamingConfiguration"
        }
    }

    public struct GetVoiceConnectorTerminationHealthRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorTerminationHealthResponse: AWSDecodableShape {
        public let terminationHealth: TerminationHealth?

        public init(terminationHealth: TerminationHealth? = nil) {
            self.terminationHealth = terminationHealth
        }

        private enum CodingKeys: String, CodingKey {
            case terminationHealth = "TerminationHealth"
        }
    }

    public struct GetVoiceConnectorTerminationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorTerminationResponse: AWSDecodableShape {
        public let termination: Termination?

        public init(termination: Termination? = nil) {
            self.termination = termination
        }

        private enum CodingKeys: String, CodingKey {
            case termination = "Termination"
        }
    }

    public struct ListAvailableVoiceConnectorRegionsResponse: AWSDecodableShape {
        public let voiceConnectorRegions: [VoiceConnectorAwsRegion]?

        public init(voiceConnectorRegions: [VoiceConnectorAwsRegion]? = nil) {
            self.voiceConnectorRegions = voiceConnectorRegions
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnectorRegions = "VoiceConnectorRegions"
        }
    }

    public struct ListPhoneNumberOrdersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        public let maxResults: Int?
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 100)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListPhoneNumberOrdersResponse: AWSDecodableShape {
        public let nextToken: String?
        public let phoneNumberOrders: [PhoneNumberOrder]?

        public init(nextToken: String? = nil, phoneNumberOrders: [PhoneNumberOrder]? = nil) {
            self.nextToken = nextToken
            self.phoneNumberOrders = phoneNumberOrders
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case phoneNumberOrders = "PhoneNumberOrders"
        }
    }

    public struct ListPhoneNumbersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "filterName", location: .querystring("filter-name")),
            AWSMemberEncoding(label: "filterValue", location: .querystring("filter-value")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token")),
            AWSMemberEncoding(label: "productType", location: .querystring("product-type")),
            AWSMemberEncoding(label: "status", location: .querystring("status"))
        ]

        public let filterName: PhoneNumberAssociationName?
        public let filterValue: String?
        public let maxResults: Int?
        public let nextToken: String?
        public let productType: PhoneNumberProductType?
        public let status: String?

        public init(filterName: PhoneNumberAssociationName? = nil, filterValue: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, productType: PhoneNumberProductType? = nil, status: String? = nil) {
            self.filterName = filterName
            self.filterValue = filterValue
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.productType = productType
            self.status = status
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 100)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListPhoneNumbersResponse: AWSDecodableShape {
        public let nextToken: String?
        public let phoneNumbers: [PhoneNumber]?

        public init(nextToken: String? = nil, phoneNumbers: [PhoneNumber]? = nil) {
            self.nextToken = nextToken
            self.phoneNumbers = phoneNumbers
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case phoneNumbers = "PhoneNumbers"
        }
    }

    public struct ListProxySessionsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token")),
            AWSMemberEncoding(label: "status", location: .querystring("status")),
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let maxResults: Int?
        public let nextToken: String?
        public let status: ProxySessionStatus?
        public let voiceConnectorId: String

        public init(maxResults: Int? = nil, nextToken: String? = nil, status: ProxySessionStatus? = nil, voiceConnectorId: String) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.status = status
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 100)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 65535)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListProxySessionsResponse: AWSDecodableShape {
        public let nextToken: String?
        public let proxySessions: [ProxySession]?

        public init(nextToken: String? = nil, proxySessions: [ProxySession]? = nil) {
            self.nextToken = nextToken
            self.proxySessions = proxySessions
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case proxySessions = "ProxySessions"
        }
    }

    public struct ListSipMediaApplicationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        public let maxResults: Int?
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 100)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 65535)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListSipMediaApplicationsResponse: AWSDecodableShape {
        public let nextToken: String?
        public let sipMediaApplications: [SipMediaApplication]?

        public init(nextToken: String? = nil, sipMediaApplications: [SipMediaApplication]? = nil) {
            self.nextToken = nextToken
            self.sipMediaApplications = sipMediaApplications
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case sipMediaApplications = "SipMediaApplications"
        }
    }

    public struct ListSipRulesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token")),
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .querystring("sip-media-application"))
        ]

        public let maxResults: Int?
        public let nextToken: String?
        public let sipMediaApplicationId: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil, sipMediaApplicationId: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 100)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 65535)
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListSipRulesResponse: AWSDecodableShape {
        public let nextToken: String?
        public let sipRules: [SipRule]?

        public init(nextToken: String? = nil, sipRules: [SipRule]? = nil) {
            self.nextToken = nextToken
            self.sipRules = sipRules
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case sipRules = "SipRules"
        }
    }

    public struct ListSupportedPhoneNumberCountriesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "productType", location: .querystring("product-type"))
        ]

        public let productType: PhoneNumberProductType

        public init(productType: PhoneNumberProductType) {
            self.productType = productType
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListSupportedPhoneNumberCountriesResponse: AWSDecodableShape {
        public let phoneNumberCountries: [PhoneNumberCountry]?

        public init(phoneNumberCountries: [PhoneNumberCountry]? = nil) {
            self.phoneNumberCountries = phoneNumberCountries
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberCountries = "PhoneNumberCountries"
        }
    }

    public struct ListVoiceConnectorGroupsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        public let maxResults: Int?
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 100)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListVoiceConnectorGroupsResponse: AWSDecodableShape {
        public let nextToken: String?
        public let voiceConnectorGroups: [VoiceConnectorGroup]?

        public init(nextToken: String? = nil, voiceConnectorGroups: [VoiceConnectorGroup]? = nil) {
            self.nextToken = nextToken
            self.voiceConnectorGroups = voiceConnectorGroups
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case voiceConnectorGroups = "VoiceConnectorGroups"
        }
    }

    public struct ListVoiceConnectorTerminationCredentialsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListVoiceConnectorTerminationCredentialsResponse: AWSDecodableShape {
        public let usernames: [String]?

        public init(usernames: [String]? = nil) {
            self.usernames = usernames
        }

        private enum CodingKeys: String, CodingKey {
            case usernames = "Usernames"
        }
    }

    public struct ListVoiceConnectorsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        public let maxResults: Int?
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 100)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListVoiceConnectorsResponse: AWSDecodableShape {
        public let nextToken: String?
        public let voiceConnectors: [VoiceConnector]?

        public init(nextToken: String? = nil, voiceConnectors: [VoiceConnector]? = nil) {
            self.nextToken = nextToken
            self.voiceConnectors = voiceConnectors
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case voiceConnectors = "VoiceConnectors"
        }
    }

    public struct LoggingConfiguration: AWSEncodableShape & AWSDecodableShape {
        public let enableSIPLogs: Bool?

        public init(enableSIPLogs: Bool? = nil) {
            self.enableSIPLogs = enableSIPLogs
        }

        private enum CodingKeys: String, CodingKey {
            case enableSIPLogs = "EnableSIPLogs"
        }
    }

    public struct OrderedPhoneNumber: AWSDecodableShape {
        public let e164PhoneNumber: String?
        public let status: OrderedPhoneNumberStatus?

        public init(e164PhoneNumber: String? = nil, status: OrderedPhoneNumberStatus? = nil) {
            self.e164PhoneNumber = e164PhoneNumber
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumber = "E164PhoneNumber"
            case status = "Status"
        }
    }

    public struct Origination: AWSEncodableShape & AWSDecodableShape {
        public let disabled: Bool?
        public let routes: [OriginationRoute]?

        public init(disabled: Bool? = nil, routes: [OriginationRoute]? = nil) {
            self.disabled = disabled
            self.routes = routes
        }

        public func validate(name: String) throws {
            try self.routes?.forEach {
                try $0.validate(name: "\(name).routes[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case disabled = "Disabled"
            case routes = "Routes"
        }
    }

    public struct OriginationRoute: AWSEncodableShape & AWSDecodableShape {
        public let host: String?
        public let port: Int?
        public let priority: Int?
        public let `protocol`: OriginationRouteProtocol?
        public let weight: Int?

        public init(host: String? = nil, port: Int? = nil, priority: Int? = nil, protocol: OriginationRouteProtocol? = nil, weight: Int? = nil) {
            self.host = host
            self.port = port
            self.priority = priority
            self.`protocol` = `protocol`
            self.weight = weight
        }

        public func validate(name: String) throws {
            try self.validate(self.port, name: "port", parent: name, max: 65535)
            try self.validate(self.port, name: "port", parent: name, min: 0)
            try self.validate(self.priority, name: "priority", parent: name, max: 100)
            try self.validate(self.priority, name: "priority", parent: name, min: 1)
            try self.validate(self.weight, name: "weight", parent: name, max: 100)
            try self.validate(self.weight, name: "weight", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case host = "Host"
            case port = "Port"
            case priority = "Priority"
            case `protocol` = "Protocol"
            case weight = "Weight"
        }
    }

    public struct Participant: AWSDecodableShape {
        public let phoneNumber: String?
        public let proxyPhoneNumber: String?

        public init(phoneNumber: String? = nil, proxyPhoneNumber: String? = nil) {
            self.phoneNumber = phoneNumber
            self.proxyPhoneNumber = proxyPhoneNumber
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumber = "PhoneNumber"
            case proxyPhoneNumber = "ProxyPhoneNumber"
        }
    }

    public struct PhoneNumber: AWSDecodableShape {
        public let associations: [PhoneNumberAssociation]?
        public let callingName: String?
        public let callingNameStatus: CallingNameStatus?
        public let capabilities: PhoneNumberCapabilities?
        public let country: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var deletionTimestamp: Date?
        public let e164PhoneNumber: String?
        public let orderId: String?
        public let phoneNumberId: String?
        public let productType: PhoneNumberProductType?
        public let status: PhoneNumberStatus?
        public let type: PhoneNumberType?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(associations: [PhoneNumberAssociation]? = nil, callingName: String? = nil, callingNameStatus: CallingNameStatus? = nil, capabilities: PhoneNumberCapabilities? = nil, country: String? = nil, createdTimestamp: Date? = nil, deletionTimestamp: Date? = nil, e164PhoneNumber: String? = nil, orderId: String? = nil, phoneNumberId: String? = nil, productType: PhoneNumberProductType? = nil, status: PhoneNumberStatus? = nil, type: PhoneNumberType? = nil, updatedTimestamp: Date? = nil) {
            self.associations = associations
            self.callingName = callingName
            self.callingNameStatus = callingNameStatus
            self.capabilities = capabilities
            self.country = country
            self.createdTimestamp = createdTimestamp
            self.deletionTimestamp = deletionTimestamp
            self.e164PhoneNumber = e164PhoneNumber
            self.orderId = orderId
            self.phoneNumberId = phoneNumberId
            self.productType = productType
            self.status = status
            self.type = type
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case associations = "Associations"
            case callingName = "CallingName"
            case callingNameStatus = "CallingNameStatus"
            case capabilities = "Capabilities"
            case country = "Country"
            case createdTimestamp = "CreatedTimestamp"
            case deletionTimestamp = "DeletionTimestamp"
            case e164PhoneNumber = "E164PhoneNumber"
            case orderId = "OrderId"
            case phoneNumberId = "PhoneNumberId"
            case productType = "ProductType"
            case status = "Status"
            case type = "Type"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct PhoneNumberAssociation: AWSDecodableShape {
        @OptionalCustomCoding<ISO8601DateCoder>
        public var associatedTimestamp: Date?
        public let name: PhoneNumberAssociationName?
        public let value: String?

        public init(associatedTimestamp: Date? = nil, name: PhoneNumberAssociationName? = nil, value: String? = nil) {
            self.associatedTimestamp = associatedTimestamp
            self.name = name
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case associatedTimestamp = "AssociatedTimestamp"
            case name = "Name"
            case value = "Value"
        }
    }

    public struct PhoneNumberCapabilities: AWSDecodableShape {
        public let inboundCall: Bool?
        public let inboundMMS: Bool?
        public let inboundSMS: Bool?
        public let outboundCall: Bool?
        public let outboundMMS: Bool?
        public let outboundSMS: Bool?

        public init(inboundCall: Bool? = nil, inboundMMS: Bool? = nil, inboundSMS: Bool? = nil, outboundCall: Bool? = nil, outboundMMS: Bool? = nil, outboundSMS: Bool? = nil) {
            self.inboundCall = inboundCall
            self.inboundMMS = inboundMMS
            self.inboundSMS = inboundSMS
            self.outboundCall = outboundCall
            self.outboundMMS = outboundMMS
            self.outboundSMS = outboundSMS
        }

        private enum CodingKeys: String, CodingKey {
            case inboundCall = "InboundCall"
            case inboundMMS = "InboundMMS"
            case inboundSMS = "InboundSMS"
            case outboundCall = "OutboundCall"
            case outboundMMS = "OutboundMMS"
            case outboundSMS = "OutboundSMS"
        }
    }

    public struct PhoneNumberCountry: AWSDecodableShape {
        public let countryCode: String?
        public let supportedPhoneNumberTypes: [PhoneNumberType]?

        public init(countryCode: String? = nil, supportedPhoneNumberTypes: [PhoneNumberType]? = nil) {
            self.countryCode = countryCode
            self.supportedPhoneNumberTypes = supportedPhoneNumberTypes
        }

        private enum CodingKeys: String, CodingKey {
            case countryCode = "CountryCode"
            case supportedPhoneNumberTypes = "SupportedPhoneNumberTypes"
        }
    }

    public struct PhoneNumberError: AWSDecodableShape {
        public let errorCode: ErrorCode?
        public let errorMessage: String?
        public let phoneNumberId: String?

        public init(errorCode: ErrorCode? = nil, errorMessage: String? = nil, phoneNumberId: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.phoneNumberId = phoneNumberId
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
            case phoneNumberId = "PhoneNumberId"
        }
    }

    public struct PhoneNumberOrder: AWSDecodableShape {
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        public let orderedPhoneNumbers: [OrderedPhoneNumber]?
        public let orderType: PhoneNumberOrderType?
        public let phoneNumberOrderId: String?
        public let productType: PhoneNumberProductType?
        public let status: PhoneNumberOrderStatus?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(createdTimestamp: Date? = nil, orderedPhoneNumbers: [OrderedPhoneNumber]? = nil, orderType: PhoneNumberOrderType? = nil, phoneNumberOrderId: String? = nil, productType: PhoneNumberProductType? = nil, status: PhoneNumberOrderStatus? = nil, updatedTimestamp: Date? = nil) {
            self.createdTimestamp = createdTimestamp
            self.orderedPhoneNumbers = orderedPhoneNumbers
            self.orderType = orderType
            self.phoneNumberOrderId = phoneNumberOrderId
            self.productType = productType
            self.status = status
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case createdTimestamp = "CreatedTimestamp"
            case orderedPhoneNumbers = "OrderedPhoneNumbers"
            case orderType = "OrderType"
            case phoneNumberOrderId = "PhoneNumberOrderId"
            case productType = "ProductType"
            case status = "Status"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct Proxy: AWSDecodableShape {
        public let defaultSessionExpiryMinutes: Int?
        public let disabled: Bool?
        public let fallBackPhoneNumber: String?
        public let phoneNumberCountries: [String]?

        public init(defaultSessionExpiryMinutes: Int? = nil, disabled: Bool? = nil, fallBackPhoneNumber: String? = nil, phoneNumberCountries: [String]? = nil) {
            self.defaultSessionExpiryMinutes = defaultSessionExpiryMinutes
            self.disabled = disabled
            self.fallBackPhoneNumber = fallBackPhoneNumber
            self.phoneNumberCountries = phoneNumberCountries
        }

        private enum CodingKeys: String, CodingKey {
            case defaultSessionExpiryMinutes = "DefaultSessionExpiryMinutes"
            case disabled = "Disabled"
            case fallBackPhoneNumber = "FallBackPhoneNumber"
            case phoneNumberCountries = "PhoneNumberCountries"
        }
    }

    public struct ProxySession: AWSDecodableShape {
        public let capabilities: [Capability]?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var endedTimestamp: Date?
        public let expiryMinutes: Int?
        public let geoMatchLevel: GeoMatchLevel?
        public let geoMatchParams: GeoMatchParams?
        public let name: String?
        public let numberSelectionBehavior: NumberSelectionBehavior?
        public let participants: [Participant]?
        public let proxySessionId: String?
        public let status: ProxySessionStatus?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?
        public let voiceConnectorId: String?

        public init(capabilities: [Capability]? = nil, createdTimestamp: Date? = nil, endedTimestamp: Date? = nil, expiryMinutes: Int? = nil, geoMatchLevel: GeoMatchLevel? = nil, geoMatchParams: GeoMatchParams? = nil, name: String? = nil, numberSelectionBehavior: NumberSelectionBehavior? = nil, participants: [Participant]? = nil, proxySessionId: String? = nil, status: ProxySessionStatus? = nil, updatedTimestamp: Date? = nil, voiceConnectorId: String? = nil) {
            self.capabilities = capabilities
            self.createdTimestamp = createdTimestamp
            self.endedTimestamp = endedTimestamp
            self.expiryMinutes = expiryMinutes
            self.geoMatchLevel = geoMatchLevel
            self.geoMatchParams = geoMatchParams
            self.name = name
            self.numberSelectionBehavior = numberSelectionBehavior
            self.participants = participants
            self.proxySessionId = proxySessionId
            self.status = status
            self.updatedTimestamp = updatedTimestamp
            self.voiceConnectorId = voiceConnectorId
        }

        private enum CodingKeys: String, CodingKey {
            case capabilities = "Capabilities"
            case createdTimestamp = "CreatedTimestamp"
            case endedTimestamp = "EndedTimestamp"
            case expiryMinutes = "ExpiryMinutes"
            case geoMatchLevel = "GeoMatchLevel"
            case geoMatchParams = "GeoMatchParams"
            case name = "Name"
            case numberSelectionBehavior = "NumberSelectionBehavior"
            case participants = "Participants"
            case proxySessionId = "ProxySessionId"
            case status = "Status"
            case updatedTimestamp = "UpdatedTimestamp"
            case voiceConnectorId = "VoiceConnectorId"
        }
    }

    public struct PutSipMediaApplicationAlexaSkillConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId"))
        ]

        public let sipMediaApplicationAlexaSkillConfiguration: SipMediaApplicationAlexaSkillConfiguration?
        public let sipMediaApplicationId: String

        public init(sipMediaApplicationAlexaSkillConfiguration: SipMediaApplicationAlexaSkillConfiguration? = nil, sipMediaApplicationId: String) {
            self.sipMediaApplicationAlexaSkillConfiguration = sipMediaApplicationAlexaSkillConfiguration
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.sipMediaApplicationAlexaSkillConfiguration?.validate(name: "\(name).sipMediaApplicationAlexaSkillConfiguration")
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationAlexaSkillConfiguration = "SipMediaApplicationAlexaSkillConfiguration"
        }
    }

    public struct PutSipMediaApplicationAlexaSkillConfigurationResponse: AWSDecodableShape {
        public let sipMediaApplicationAlexaSkillConfiguration: SipMediaApplicationAlexaSkillConfiguration?

        public init(sipMediaApplicationAlexaSkillConfiguration: SipMediaApplicationAlexaSkillConfiguration? = nil) {
            self.sipMediaApplicationAlexaSkillConfiguration = sipMediaApplicationAlexaSkillConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationAlexaSkillConfiguration = "SipMediaApplicationAlexaSkillConfiguration"
        }
    }

    public struct PutSipMediaApplicationLoggingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId"))
        ]

        public let sipMediaApplicationId: String
        public let sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration?

        public init(sipMediaApplicationId: String, sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration? = nil) {
            self.sipMediaApplicationId = sipMediaApplicationId
            self.sipMediaApplicationLoggingConfiguration = sipMediaApplicationLoggingConfiguration
        }

        public func validate(name: String) throws {
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationLoggingConfiguration = "SipMediaApplicationLoggingConfiguration"
        }
    }

    public struct PutSipMediaApplicationLoggingConfigurationResponse: AWSDecodableShape {
        public let sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration?

        public init(sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration? = nil) {
            self.sipMediaApplicationLoggingConfiguration = sipMediaApplicationLoggingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationLoggingConfiguration = "SipMediaApplicationLoggingConfiguration"
        }
    }

    public struct PutVoiceConnectorEmergencyCallingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let emergencyCallingConfiguration: EmergencyCallingConfiguration
        public let voiceConnectorId: String

        public init(emergencyCallingConfiguration: EmergencyCallingConfiguration, voiceConnectorId: String) {
            self.emergencyCallingConfiguration = emergencyCallingConfiguration
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.emergencyCallingConfiguration.validate(name: "\(name).emergencyCallingConfiguration")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case emergencyCallingConfiguration = "EmergencyCallingConfiguration"
        }
    }

    public struct PutVoiceConnectorEmergencyCallingConfigurationResponse: AWSDecodableShape {
        public let emergencyCallingConfiguration: EmergencyCallingConfiguration?

        public init(emergencyCallingConfiguration: EmergencyCallingConfiguration? = nil) {
            self.emergencyCallingConfiguration = emergencyCallingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case emergencyCallingConfiguration = "EmergencyCallingConfiguration"
        }
    }

    public struct PutVoiceConnectorLoggingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let loggingConfiguration: LoggingConfiguration
        public let voiceConnectorId: String

        public init(loggingConfiguration: LoggingConfiguration, voiceConnectorId: String) {
            self.loggingConfiguration = loggingConfiguration
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case loggingConfiguration = "LoggingConfiguration"
        }
    }

    public struct PutVoiceConnectorLoggingConfigurationResponse: AWSDecodableShape {
        public let loggingConfiguration: LoggingConfiguration?

        public init(loggingConfiguration: LoggingConfiguration? = nil) {
            self.loggingConfiguration = loggingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case loggingConfiguration = "LoggingConfiguration"
        }
    }

    public struct PutVoiceConnectorOriginationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let origination: Origination
        public let voiceConnectorId: String

        public init(origination: Origination, voiceConnectorId: String) {
            self.origination = origination
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.origination.validate(name: "\(name).origination")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case origination = "Origination"
        }
    }

    public struct PutVoiceConnectorOriginationResponse: AWSDecodableShape {
        public let origination: Origination?

        public init(origination: Origination? = nil) {
            self.origination = origination
        }

        private enum CodingKeys: String, CodingKey {
            case origination = "Origination"
        }
    }

    public struct PutVoiceConnectorProxyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let defaultSessionExpiryMinutes: Int
        public let disabled: Bool?
        public let fallBackPhoneNumber: String?
        public let phoneNumberPoolCountries: [String]
        public let voiceConnectorId: String

        public init(defaultSessionExpiryMinutes: Int, disabled: Bool? = nil, fallBackPhoneNumber: String? = nil, phoneNumberPoolCountries: [String], voiceConnectorId: String) {
            self.defaultSessionExpiryMinutes = defaultSessionExpiryMinutes
            self.disabled = disabled
            self.fallBackPhoneNumber = fallBackPhoneNumber
            self.phoneNumberPoolCountries = phoneNumberPoolCountries
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.fallBackPhoneNumber, name: "fallBackPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            try self.phoneNumberPoolCountries.forEach {
                try validate($0, name: "phoneNumberPoolCountries[]", parent: name, pattern: "^$|^[A-Z]{2,2}$")
            }
            try self.validate(self.phoneNumberPoolCountries, name: "phoneNumberPoolCountries", parent: name, max: 100)
            try self.validate(self.phoneNumberPoolCountries, name: "phoneNumberPoolCountries", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case defaultSessionExpiryMinutes = "DefaultSessionExpiryMinutes"
            case disabled = "Disabled"
            case fallBackPhoneNumber = "FallBackPhoneNumber"
            case phoneNumberPoolCountries = "PhoneNumberPoolCountries"
        }
    }

    public struct PutVoiceConnectorProxyResponse: AWSDecodableShape {
        public let proxy: Proxy?

        public init(proxy: Proxy? = nil) {
            self.proxy = proxy
        }

        private enum CodingKeys: String, CodingKey {
            case proxy = "Proxy"
        }
    }

    public struct PutVoiceConnectorStreamingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let streamingConfiguration: StreamingConfiguration
        public let voiceConnectorId: String

        public init(streamingConfiguration: StreamingConfiguration, voiceConnectorId: String) {
            self.streamingConfiguration = streamingConfiguration
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.streamingConfiguration.validate(name: "\(name).streamingConfiguration")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case streamingConfiguration = "StreamingConfiguration"
        }
    }

    public struct PutVoiceConnectorStreamingConfigurationResponse: AWSDecodableShape {
        public let streamingConfiguration: StreamingConfiguration?

        public init(streamingConfiguration: StreamingConfiguration? = nil) {
            self.streamingConfiguration = streamingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case streamingConfiguration = "StreamingConfiguration"
        }
    }

    public struct PutVoiceConnectorTerminationCredentialsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let credentials: [Credential]?
        public let voiceConnectorId: String

        public init(credentials: [Credential]? = nil, voiceConnectorId: String) {
            self.credentials = credentials
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case credentials = "Credentials"
        }
    }

    public struct PutVoiceConnectorTerminationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let termination: Termination
        public let voiceConnectorId: String

        public init(termination: Termination, voiceConnectorId: String) {
            self.termination = termination
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.termination.validate(name: "\(name).termination")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case termination = "Termination"
        }
    }

    public struct PutVoiceConnectorTerminationResponse: AWSDecodableShape {
        public let termination: Termination?

        public init(termination: Termination? = nil) {
            self.termination = termination
        }

        private enum CodingKeys: String, CodingKey {
            case termination = "Termination"
        }
    }

    public struct RestorePhoneNumberRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "phoneNumberId", location: .uri("PhoneNumberId"))
        ]

        public let phoneNumberId: String

        public init(phoneNumberId: String) {
            self.phoneNumberId = phoneNumberId
        }

        public func validate(name: String) throws {
            try self.validate(self.phoneNumberId, name: "phoneNumberId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct RestorePhoneNumberResponse: AWSDecodableShape {
        public let phoneNumber: PhoneNumber?

        public init(phoneNumber: PhoneNumber? = nil) {
            self.phoneNumber = phoneNumber
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumber = "PhoneNumber"
        }
    }

    public struct SearchAvailablePhoneNumbersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "areaCode", location: .querystring("area-code")),
            AWSMemberEncoding(label: "city", location: .querystring("city")),
            AWSMemberEncoding(label: "country", location: .querystring("country")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token")),
            AWSMemberEncoding(label: "phoneNumberType", location: .querystring("phone-number-type")),
            AWSMemberEncoding(label: "state", location: .querystring("state")),
            AWSMemberEncoding(label: "tollFreePrefix", location: .querystring("toll-free-prefix"))
        ]

        public let areaCode: String?
        public let city: String?
        public let country: String?
        public let maxResults: Int?
        public let nextToken: String?
        public let phoneNumberType: PhoneNumberType?
        public let state: String?
        public let tollFreePrefix: String?

        public init(areaCode: String? = nil, city: String? = nil, country: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, phoneNumberType: PhoneNumberType? = nil, state: String? = nil, tollFreePrefix: String? = nil) {
            self.areaCode = areaCode
            self.city = city
            self.country = country
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.phoneNumberType = phoneNumberType
            self.state = state
            self.tollFreePrefix = tollFreePrefix
        }

        public func validate(name: String) throws {
            try self.validate(self.country, name: "country", parent: name, pattern: "^[A-Z]{2}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 500)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.tollFreePrefix, name: "tollFreePrefix", parent: name, max: 3)
            try self.validate(self.tollFreePrefix, name: "tollFreePrefix", parent: name, min: 3)
            try self.validate(self.tollFreePrefix, name: "tollFreePrefix", parent: name, pattern: "^8(00|33|44|55|66|77|88)$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct SearchAvailablePhoneNumbersResponse: AWSDecodableShape {
        public let e164PhoneNumbers: [String]?
        public let nextToken: String?

        public init(e164PhoneNumbers: [String]? = nil, nextToken: String? = nil) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
            case nextToken = "NextToken"
        }
    }

    public struct SipMediaApplication: AWSDecodableShape {
        public let awsRegion: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        public let endpoints: [SipMediaApplicationEndpoint]?
        public let name: String?
        public let sipMediaApplicationId: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(awsRegion: String? = nil, createdTimestamp: Date? = nil, endpoints: [SipMediaApplicationEndpoint]? = nil, name: String? = nil, sipMediaApplicationId: String? = nil, updatedTimestamp: Date? = nil) {
            self.awsRegion = awsRegion
            self.createdTimestamp = createdTimestamp
            self.endpoints = endpoints
            self.name = name
            self.sipMediaApplicationId = sipMediaApplicationId
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case createdTimestamp = "CreatedTimestamp"
            case endpoints = "Endpoints"
            case name = "Name"
            case sipMediaApplicationId = "SipMediaApplicationId"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct SipMediaApplicationAlexaSkillConfiguration: AWSEncodableShape & AWSDecodableShape {
        public let alexaSkillIds: [String]
        public let alexaSkillStatus: AlexaSkillStatus

        public init(alexaSkillIds: [String], alexaSkillStatus: AlexaSkillStatus) {
            self.alexaSkillIds = alexaSkillIds
            self.alexaSkillStatus = alexaSkillStatus
        }

        public func validate(name: String) throws {
            try self.alexaSkillIds.forEach {
                try validate($0, name: "alexaSkillIds[]", parent: name, max: 64)
                try validate($0, name: "alexaSkillIds[]", parent: name, pattern: "^amzn1\\.application-oa2-client\\.[0-9a-fA-F]{32}$")
            }
            try self.validate(self.alexaSkillIds, name: "alexaSkillIds", parent: name, max: 1)
            try self.validate(self.alexaSkillIds, name: "alexaSkillIds", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case alexaSkillIds = "AlexaSkillIds"
            case alexaSkillStatus = "AlexaSkillStatus"
        }
    }

    public struct SipMediaApplicationCall: AWSDecodableShape {
        public let transactionId: String?

        public init(transactionId: String? = nil) {
            self.transactionId = transactionId
        }

        private enum CodingKeys: String, CodingKey {
            case transactionId = "TransactionId"
        }
    }

    public struct SipMediaApplicationEndpoint: AWSEncodableShape & AWSDecodableShape {
        public let lambdaArn: String?

        public init(lambdaArn: String? = nil) {
            self.lambdaArn = lambdaArn
        }

        public func validate(name: String) throws {
            try self.validate(self.lambdaArn, name: "lambdaArn", parent: name, max: 10000)
            try self.validate(self.lambdaArn, name: "lambdaArn", parent: name, pattern: "^arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:\\d{12}:function:[a-zA-Z0-9-_]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?$")
        }

        private enum CodingKeys: String, CodingKey {
            case lambdaArn = "LambdaArn"
        }
    }

    public struct SipMediaApplicationLoggingConfiguration: AWSEncodableShape & AWSDecodableShape {
        public let enableSipMediaApplicationMessageLogs: Bool?

        public init(enableSipMediaApplicationMessageLogs: Bool? = nil) {
            self.enableSipMediaApplicationMessageLogs = enableSipMediaApplicationMessageLogs
        }

        private enum CodingKeys: String, CodingKey {
            case enableSipMediaApplicationMessageLogs = "EnableSipMediaApplicationMessageLogs"
        }
    }

    public struct SipRule: AWSDecodableShape {
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        public let disabled: Bool?
        public let name: String?
        public let sipRuleId: String?
        public let targetApplications: [SipRuleTargetApplication]?
        public let triggerType: SipRuleTriggerType?
        public let triggerValue: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(createdTimestamp: Date? = nil, disabled: Bool? = nil, name: String? = nil, sipRuleId: String? = nil, targetApplications: [SipRuleTargetApplication]? = nil, triggerType: SipRuleTriggerType? = nil, triggerValue: String? = nil, updatedTimestamp: Date? = nil) {
            self.createdTimestamp = createdTimestamp
            self.disabled = disabled
            self.name = name
            self.sipRuleId = sipRuleId
            self.targetApplications = targetApplications
            self.triggerType = triggerType
            self.triggerValue = triggerValue
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case createdTimestamp = "CreatedTimestamp"
            case disabled = "Disabled"
            case name = "Name"
            case sipRuleId = "SipRuleId"
            case targetApplications = "TargetApplications"
            case triggerType = "TriggerType"
            case triggerValue = "TriggerValue"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct SipRuleTargetApplication: AWSEncodableShape & AWSDecodableShape {
        public let awsRegion: String?
        public let priority: Int?
        public let sipMediaApplicationId: String?

        public init(awsRegion: String? = nil, priority: Int? = nil, sipMediaApplicationId: String? = nil) {
            self.awsRegion = awsRegion
            self.priority = priority
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.priority, name: "priority", parent: name, min: 1)
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case priority = "Priority"
            case sipMediaApplicationId = "SipMediaApplicationId"
        }
    }

    public struct StreamingConfiguration: AWSEncodableShape & AWSDecodableShape {
        public let dataRetentionInHours: Int
        public let disabled: Bool
        public let streamingNotificationTargets: [StreamingNotificationTarget]?

        public init(dataRetentionInHours: Int, disabled: Bool, streamingNotificationTargets: [StreamingNotificationTarget]? = nil) {
            self.dataRetentionInHours = dataRetentionInHours
            self.disabled = disabled
            self.streamingNotificationTargets = streamingNotificationTargets
        }

        public func validate(name: String) throws {
            try self.validate(self.dataRetentionInHours, name: "dataRetentionInHours", parent: name, min: 0)
            try self.validate(self.streamingNotificationTargets, name: "streamingNotificationTargets", parent: name, max: 3)
            try self.validate(self.streamingNotificationTargets, name: "streamingNotificationTargets", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case dataRetentionInHours = "DataRetentionInHours"
            case disabled = "Disabled"
            case streamingNotificationTargets = "StreamingNotificationTargets"
        }
    }

    public struct StreamingNotificationTarget: AWSEncodableShape & AWSDecodableShape {
        public let notificationTarget: NotificationTarget?

        public init(notificationTarget: NotificationTarget? = nil) {
            self.notificationTarget = notificationTarget
        }

        private enum CodingKeys: String, CodingKey {
            case notificationTarget = "NotificationTarget"
        }
    }

    public struct Termination: AWSEncodableShape & AWSDecodableShape {
        public let callingRegions: [String]?
        public let cidrAllowedList: [String]?
        public let cpsLimit: Int?
        public let defaultPhoneNumber: String?
        public let disabled: Bool?

        public init(callingRegions: [String]? = nil, cidrAllowedList: [String]? = nil, cpsLimit: Int? = nil, defaultPhoneNumber: String? = nil, disabled: Bool? = nil) {
            self.callingRegions = callingRegions
            self.cidrAllowedList = cidrAllowedList
            self.cpsLimit = cpsLimit
            self.defaultPhoneNumber = defaultPhoneNumber
            self.disabled = disabled
        }

        public func validate(name: String) throws {
            try self.validate(self.cpsLimit, name: "cpsLimit", parent: name, min: 1)
            try self.validate(self.defaultPhoneNumber, name: "defaultPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
        }

        private enum CodingKeys: String, CodingKey {
            case callingRegions = "CallingRegions"
            case cidrAllowedList = "CidrAllowedList"
            case cpsLimit = "CpsLimit"
            case defaultPhoneNumber = "DefaultPhoneNumber"
            case disabled = "Disabled"
        }
    }

    public struct TerminationHealth: AWSDecodableShape {
        public let source: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var timestamp: Date?

        public init(source: String? = nil, timestamp: Date? = nil) {
            self.source = source
            self.timestamp = timestamp
        }

        private enum CodingKeys: String, CodingKey {
            case source = "Source"
            case timestamp = "Timestamp"
        }
    }

    public struct UpdateGlobalSettingsRequest: AWSEncodableShape {
        public let voiceConnector: VoiceConnectorSettings?

        public init(voiceConnector: VoiceConnectorSettings? = nil) {
            self.voiceConnector = voiceConnector
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnector = "VoiceConnector"
        }
    }

    public struct UpdatePhoneNumberRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "phoneNumberId", location: .uri("PhoneNumberId"))
        ]

        public let callingName: String?
        public let phoneNumberId: String
        public let productType: PhoneNumberProductType?

        public init(callingName: String? = nil, phoneNumberId: String, productType: PhoneNumberProductType? = nil) {
            self.callingName = callingName
            self.phoneNumberId = phoneNumberId
            self.productType = productType
        }

        public func validate(name: String) throws {
            try self.validate(self.callingName, name: "callingName", parent: name, pattern: "^$|^[a-zA-Z0-9 ]{2,15}$")
            try self.validate(self.phoneNumberId, name: "phoneNumberId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case callingName = "CallingName"
            case productType = "ProductType"
        }
    }

    public struct UpdatePhoneNumberRequestItem: AWSEncodableShape {
        public let callingName: String?
        public let phoneNumberId: String
        public let productType: PhoneNumberProductType?

        public init(callingName: String? = nil, phoneNumberId: String, productType: PhoneNumberProductType? = nil) {
            self.callingName = callingName
            self.phoneNumberId = phoneNumberId
            self.productType = productType
        }

        public func validate(name: String) throws {
            try self.validate(self.callingName, name: "callingName", parent: name, pattern: "^$|^[a-zA-Z0-9 ]{2,15}$")
            try self.validate(self.phoneNumberId, name: "phoneNumberId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case callingName = "CallingName"
            case phoneNumberId = "PhoneNumberId"
            case productType = "ProductType"
        }
    }

    public struct UpdatePhoneNumberResponse: AWSDecodableShape {
        public let phoneNumber: PhoneNumber?

        public init(phoneNumber: PhoneNumber? = nil) {
            self.phoneNumber = phoneNumber
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumber = "PhoneNumber"
        }
    }

    public struct UpdatePhoneNumberSettingsRequest: AWSEncodableShape {
        public let callingName: String

        public init(callingName: String) {
            self.callingName = callingName
        }

        public func validate(name: String) throws {
            try self.validate(self.callingName, name: "callingName", parent: name, pattern: "^$|^[a-zA-Z0-9 ]{2,15}$")
        }

        private enum CodingKeys: String, CodingKey {
            case callingName = "CallingName"
        }
    }

    public struct UpdateProxySessionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "proxySessionId", location: .uri("ProxySessionId")),
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let capabilities: [Capability]
        public let expiryMinutes: Int?
        public let proxySessionId: String
        public let voiceConnectorId: String

        public init(capabilities: [Capability], expiryMinutes: Int? = nil, proxySessionId: String, voiceConnectorId: String) {
            self.capabilities = capabilities
            self.expiryMinutes = expiryMinutes
            self.proxySessionId = proxySessionId
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.expiryMinutes, name: "expiryMinutes", parent: name, min: 1)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, max: 128)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, min: 1)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, pattern: "\\S")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case capabilities = "Capabilities"
            case expiryMinutes = "ExpiryMinutes"
        }
    }

    public struct UpdateProxySessionResponse: AWSDecodableShape {
        public let proxySession: ProxySession?

        public init(proxySession: ProxySession? = nil) {
            self.proxySession = proxySession
        }

        private enum CodingKeys: String, CodingKey {
            case proxySession = "ProxySession"
        }
    }

    public struct UpdateSipMediaApplicationCallRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId")),
            AWSMemberEncoding(label: "transactionId", location: .uri("TransactionId"))
        ]

        public let arguments: [String: String]
        public let sipMediaApplicationId: String
        public let transactionId: String

        public init(arguments: [String: String], sipMediaApplicationId: String, transactionId: String) {
            self.arguments = arguments
            self.sipMediaApplicationId = sipMediaApplicationId
            self.transactionId = transactionId
        }

        public func validate(name: String) throws {
            try self.validate(self.arguments, name: "arguments", parent: name, max: 20)
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
            try self.validate(self.transactionId, name: "transactionId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case arguments = "Arguments"
        }
    }

    public struct UpdateSipMediaApplicationCallResponse: AWSDecodableShape {
        public let sipMediaApplicationCall: SipMediaApplicationCall?

        public init(sipMediaApplicationCall: SipMediaApplicationCall? = nil) {
            self.sipMediaApplicationCall = sipMediaApplicationCall
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationCall = "SipMediaApplicationCall"
        }
    }

    public struct UpdateSipMediaApplicationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId"))
        ]

        public let endpoints: [SipMediaApplicationEndpoint]?
        public let name: String?
        public let sipMediaApplicationId: String

        public init(endpoints: [SipMediaApplicationEndpoint]? = nil, name: String? = nil, sipMediaApplicationId: String) {
            self.endpoints = endpoints
            self.name = name
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.endpoints?.forEach {
                try $0.validate(name: "\(name).endpoints[]")
            }
            try self.validate(self.endpoints, name: "endpoints", parent: name, max: 1)
            try self.validate(self.endpoints, name: "endpoints", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case endpoints = "Endpoints"
            case name = "Name"
        }
    }

    public struct UpdateSipMediaApplicationResponse: AWSDecodableShape {
        public let sipMediaApplication: SipMediaApplication?

        public init(sipMediaApplication: SipMediaApplication? = nil) {
            self.sipMediaApplication = sipMediaApplication
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplication = "SipMediaApplication"
        }
    }

    public struct UpdateSipRuleRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipRuleId", location: .uri("SipRuleId"))
        ]

        public let disabled: Bool?
        public let name: String
        public let sipRuleId: String
        public let targetApplications: [SipRuleTargetApplication]?

        public init(disabled: Bool? = nil, name: String, sipRuleId: String, targetApplications: [SipRuleTargetApplication]? = nil) {
            self.disabled = disabled
            self.name = name
            self.sipRuleId = sipRuleId
            self.targetApplications = targetApplications
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.sipRuleId, name: "sipRuleId", parent: name, pattern: "\\S")
            try self.targetApplications?.forEach {
                try $0.validate(name: "\(name).targetApplications[]")
            }
            try self.validate(self.targetApplications, name: "targetApplications", parent: name, max: 25)
            try self.validate(self.targetApplications, name: "targetApplications", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case disabled = "Disabled"
            case name = "Name"
            case targetApplications = "TargetApplications"
        }
    }

    public struct UpdateSipRuleResponse: AWSDecodableShape {
        public let sipRule: SipRule?

        public init(sipRule: SipRule? = nil) {
            self.sipRule = sipRule
        }

        private enum CodingKeys: String, CodingKey {
            case sipRule = "SipRule"
        }
    }

    public struct UpdateVoiceConnectorGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorGroupId", location: .uri("VoiceConnectorGroupId"))
        ]

        public let name: String
        public let voiceConnectorGroupId: String
        public let voiceConnectorItems: [VoiceConnectorItem]

        public init(name: String, voiceConnectorGroupId: String, voiceConnectorItems: [VoiceConnectorItem]) {
            self.name = name
            self.voiceConnectorGroupId = voiceConnectorGroupId
            self.voiceConnectorItems = voiceConnectorItems
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.voiceConnectorGroupId, name: "voiceConnectorGroupId", parent: name, pattern: "\\S")
            try self.voiceConnectorItems.forEach {
                try $0.validate(name: "\(name).voiceConnectorItems[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case voiceConnectorItems = "VoiceConnectorItems"
        }
    }

    public struct UpdateVoiceConnectorGroupResponse: AWSDecodableShape {
        public let voiceConnectorGroup: VoiceConnectorGroup?

        public init(voiceConnectorGroup: VoiceConnectorGroup? = nil) {
            self.voiceConnectorGroup = voiceConnectorGroup
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnectorGroup = "VoiceConnectorGroup"
        }
    }

    public struct UpdateVoiceConnectorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        public let name: String
        public let requireEncryption: Bool
        public let voiceConnectorId: String

        public init(name: String, requireEncryption: Bool, voiceConnectorId: String) {
            self.name = name
            self.requireEncryption = requireEncryption
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case requireEncryption = "RequireEncryption"
        }
    }

    public struct UpdateVoiceConnectorResponse: AWSDecodableShape {
        public let voiceConnector: VoiceConnector?

        public init(voiceConnector: VoiceConnector? = nil) {
            self.voiceConnector = voiceConnector
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnector = "VoiceConnector"
        }
    }

    public struct ValidateE911AddressRequest: AWSEncodableShape {
        public let awsAccountId: String
        public let city: String
        public let country: String
        public let postalCode: String
        public let state: String
        public let streetInfo: String
        public let streetNumber: String

        public init(awsAccountId: String, city: String, country: String, postalCode: String, state: String, streetInfo: String, streetNumber: String) {
            self.awsAccountId = awsAccountId
            self.city = city
            self.country = country
            self.postalCode = postalCode
            self.state = state
            self.streetInfo = streetInfo
            self.streetNumber = streetNumber
        }

        public func validate(name: String) throws {
            try self.validate(self.awsAccountId, name: "awsAccountId", parent: name, pattern: "\\S")
            try self.validate(self.city, name: "city", parent: name, pattern: "\\S")
            try self.validate(self.country, name: "country", parent: name, pattern: "\\S")
            try self.validate(self.postalCode, name: "postalCode", parent: name, pattern: "\\S")
            try self.validate(self.state, name: "state", parent: name, pattern: "\\S")
            try self.validate(self.streetInfo, name: "streetInfo", parent: name, pattern: "\\S")
            try self.validate(self.streetNumber, name: "streetNumber", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case awsAccountId = "AwsAccountId"
            case city = "City"
            case country = "Country"
            case postalCode = "PostalCode"
            case state = "State"
            case streetInfo = "StreetInfo"
            case streetNumber = "StreetNumber"
        }
    }

    public struct ValidateE911AddressResponse: AWSDecodableShape {
        public let address: Address?
        public let addressExternalId: String?
        public let candidateAddressList: [CandidateAddress]?
        public let validationResult: Int?

        public init(address: Address? = nil, addressExternalId: String? = nil, candidateAddressList: [CandidateAddress]? = nil, validationResult: Int? = nil) {
            self.address = address
            self.addressExternalId = addressExternalId
            self.candidateAddressList = candidateAddressList
            self.validationResult = validationResult
        }

        private enum CodingKeys: String, CodingKey {
            case address = "Address"
            case addressExternalId = "AddressExternalId"
            case candidateAddressList = "CandidateAddressList"
            case validationResult = "ValidationResult"
        }
    }

    public struct VoiceConnector: AWSDecodableShape {
        public let awsRegion: VoiceConnectorAwsRegion?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        public let name: String?
        public let outboundHostName: String?
        public let requireEncryption: Bool?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?
        public let voiceConnectorArn: String?
        public let voiceConnectorId: String?

        public init(awsRegion: VoiceConnectorAwsRegion? = nil, createdTimestamp: Date? = nil, name: String? = nil, outboundHostName: String? = nil, requireEncryption: Bool? = nil, updatedTimestamp: Date? = nil, voiceConnectorArn: String? = nil, voiceConnectorId: String? = nil) {
            self.awsRegion = awsRegion
            self.createdTimestamp = createdTimestamp
            self.name = name
            self.outboundHostName = outboundHostName
            self.requireEncryption = requireEncryption
            self.updatedTimestamp = updatedTimestamp
            self.voiceConnectorArn = voiceConnectorArn
            self.voiceConnectorId = voiceConnectorId
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case createdTimestamp = "CreatedTimestamp"
            case name = "Name"
            case outboundHostName = "OutboundHostName"
            case requireEncryption = "RequireEncryption"
            case updatedTimestamp = "UpdatedTimestamp"
            case voiceConnectorArn = "VoiceConnectorArn"
            case voiceConnectorId = "VoiceConnectorId"
        }
    }

    public struct VoiceConnectorGroup: AWSDecodableShape {
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        public let name: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?
        public let voiceConnectorGroupArn: String?
        public let voiceConnectorGroupId: String?
        public let voiceConnectorItems: [VoiceConnectorItem]?

        public init(createdTimestamp: Date? = nil, name: String? = nil, updatedTimestamp: Date? = nil, voiceConnectorGroupArn: String? = nil, voiceConnectorGroupId: String? = nil, voiceConnectorItems: [VoiceConnectorItem]? = nil) {
            self.createdTimestamp = createdTimestamp
            self.name = name
            self.updatedTimestamp = updatedTimestamp
            self.voiceConnectorGroupArn = voiceConnectorGroupArn
            self.voiceConnectorGroupId = voiceConnectorGroupId
            self.voiceConnectorItems = voiceConnectorItems
        }

        private enum CodingKeys: String, CodingKey {
            case createdTimestamp = "CreatedTimestamp"
            case name = "Name"
            case updatedTimestamp = "UpdatedTimestamp"
            case voiceConnectorGroupArn = "VoiceConnectorGroupArn"
            case voiceConnectorGroupId = "VoiceConnectorGroupId"
            case voiceConnectorItems = "VoiceConnectorItems"
        }
    }

    public struct VoiceConnectorItem: AWSEncodableShape & AWSDecodableShape {
        public let priority: Int
        public let voiceConnectorId: String

        public init(priority: Int, voiceConnectorId: String) {
            self.priority = priority
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.priority, name: "priority", parent: name, max: 99)
            try self.validate(self.priority, name: "priority", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case priority = "Priority"
            case voiceConnectorId = "VoiceConnectorId"
        }
    }

    public struct VoiceConnectorSettings: AWSEncodableShape & AWSDecodableShape {
        public let cdrBucket: String?

        public init(cdrBucket: String? = nil) {
            self.cdrBucket = cdrBucket
        }

        private enum CodingKeys: String, CodingKey {
            case cdrBucket = "CdrBucket"
        }
    }
}

// MARK: - Errors

/// Error enum for ChimeSDKVoice
public struct ChimeSDKVoiceErrorType: AWSErrorType {
    enum Code: String {
        case accessDeniedException = "AccessDeniedException"
        case badRequestException = "BadRequestException"
        case conflictException = "ConflictException"
        case forbiddenException = "ForbiddenException"
        case notFoundException = "NotFoundException"
        case resourceLimitExceededException = "ResourceLimitExceededException"
        case serviceFailureException = "ServiceFailureException"
        case serviceUnavailableException = "ServiceUnavailableException"
        case throttledClientException = "ThrottledClientException"
        case unauthorizedClientException = "UnauthorizedClientException"
    }

    private let error: Code
    public let context: AWSErrorContext?

    /// initialize ChimeSDKVoice
    public init?(errorCode: String, context: AWSErrorContext) {
        guard let error = Code(rawValue: errorCode) else { return nil }
        self.error = error
        self.context = context
    }

    internal init(_ error: Code) {
        self.error = error
        self.context = nil
    }

    /// return error code string
    public var errorCode: String { self.error.rawValue }

    public static var accessDeniedException: Self { .init(.accessDeniedException) }
    public static var badRequestException: Self { .init(.badRequestException) }
    public static var conflictException: Self { .init(.conflictException) }
    public static var forbiddenException: Self { .init(.forbiddenException) }
    public static var notFoundException: Self { .init(.notFoundException) }
    public static var resourceLimitExceededException: Self { .init(.resourceLimitExceededException) }
    public static var serviceFailureException: Self { .init(.serviceFailureException) }
    public static var serviceUnavailableException: Self { .init(.serviceUnavailableException) }
    public static var throttledClientException: Self { .init(.throttledClientException) }
    public static var unauthorizedClientException: Self { .init(.unauthorizedClientException) }
}

extension ChimeSDKVoiceErrorType: Equatable {
    public static func == (lhs: ChimeSDKVoiceErrorType, rhs: ChimeSDKVoiceErrorType) -> Bool {
        lhs.error == rhs.error
    }
}

extension ChimeSDKVoiceErrorType: CustomStringConvertible {
    public var description: String {
        return "\(self.error.rawValue): \(self.message ?? "")"
    }
}
